/**
 * 修改记录:
 * 25-01-09     郑朝军     查询策略接口,提供默认缓存查询策略
 */

/**
 * uni.cxapp.AttMapStrategy
 * 查询策略接口,提供默认缓存查询策略
 *
 * @class
 * @memberof    uni.cxapp.AttMapStrategy
 */
class AttMapStrategy 
{
  /**
   * 构造函数
   * @param {Object} options 配置选项
   * @param {Object} options.entity 实体对象
   * @param {Array} options.fldList 字段列表
   * @param {Object} options.attMap 属性映射对象
   */
  constructor(options = {}) 
  {
    this.entity = options.entity
    this.fldList = options.fldList
    this.attMap = options.attMap
  }
 
  /**
   * 保存缓存数据
   * @param {Object} options 配置选项
   * @param {Object} options.entity 实体对象，默认使用构造函数传入的entity
   * @param {Array} options.fldList 字段列表，默认使用构造函数传入的fldList
   * @param {Object} options.attMap 属性映射对象，默认使用构造函数传入的attMap
   */
  saveCacheData({entity = this.entity, fldList = this.fldList, attMap = this.attMap} = {})
  {
    const cacheData = {}
    const tabName = entity.name

    for (const fld of fldList)
    {
      cacheData[fld.colname] = attMap[fld.colname]
    }

    if (Object.keys(cacheData).length > 0)
    {
      uni.cxapp.SPUtil.put(`${tabName}-fld-cache`, JSON.stringify(cacheData))        
    }
  }

  /**
   * 获取缓存数据
   * @param {Object} options 配置选项
   * @param {Object} options.entity 实体对象，默认使用构造函数传入的entity
   * @returns {Object} 缓存数据
   */
  getCacheData({entity = this.entity} = {})
  {
    const tabName = entity.name
    const cacheStr = uni.cxapp.SPUtil.getSync(`${tabName}-fld-cache`)

    try
    {
      return cacheStr ? JSON.parse(cacheStr) : {}
    }
    catch (error)
    {
      console.error('解析缓存数据失败:', error)
      return {}
    }
  }
}

export default AttMapStrategy